/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.edu.pucp.Reportes.Controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.JasperViewer;
import pe.edu.pucp.Maestros.DAO.AeropuertoDAO;
import pe.edu.pucp.Modelo.Aeropuerto;
import pe.edu.pucp.Modelo.Ciudad;
import pe.edu.pucp.Modelo.Continente;
import pe.edu.pucp.Modelo.Pais;
import pe.edu.pucp.Modelo.Permiso;
import pe.edu.pucp.Modelo.Usuario;
import pe.edu.pucp.Reportes.DAO.ReporteAlmacenDAO;
import pe.edu.pucp.Reportes.Vista.ReporteAlmacenGUI;
import pe.edu.pucp.Util.Reportclass.Almacenes;
import pe.edu.pucp.Util.Reportclass.AlmacenesDatasource;
import pe.edu.pucp.Util.ValHelper;

/**
 *
 * @author oscar
 */
public class ReporteAlmacenControlador {
    private ReporteAlmacenDAO m;
    private AeropuertoDAO m1;
    private ReporteAlmacenGUI view ;
    private ArrayList<Aeropuerto> lstAeropuertos;
    private ArrayList<Ciudad> lstCiudades;
    private ArrayList<Pais> lstPais;
    private ArrayList<Continente> lstContinentes;
    private Usuario usr;
    
    public ReporteAlmacenControlador(ReporteAlmacenDAO dao, ReporteAlmacenGUI v, Usuario user)
    {
        m1 = new AeropuertoDAO();
        m = dao;
        view = v;
        usr = user;
        view.mostrarPermisos(new  ArrayList<Permiso>(user.getPerfil().getPermisos()));
        
        this.loadCombos();
        
        lstAeropuertos = m1.listarAeropuertos(null, null, false);
        view.llenaGrilla(lstAeropuertos);
//        this.inicializarTablaResultados(); 
        
        this.view.addBuscarButtonListener( new ListarAeropuertos() );
        this.view.addLimpiarButtonListener(new ReporteAlmacenControlador.LimpiarButtonListener());
        this.view.addCambiarContinente(new ReporteAlmacenControlador.cambiarLstPais());
        this.view.addCambiarPais(new ReporteAlmacenControlador.cambiarLstCiudad());  
        this.view.addGenerarPDF(new Generar());
    }
    
    private void loadCombos() {
        llenarContinenteCombo();
        view.llenarComboPais(null);
        view.llenarComboCiudad(null);
    }
            
    private void llenarCiudadCombo(Pais pa){
        lstCiudades = m1.listarCiudad(pa.getIdpais());
        view.llenarComboCiudad(lstCiudades);
    }
    
    private void llenarContinenteCombo(){
        lstContinentes = m1.listarContinente();
        view.llenarComboContinente(lstContinentes);
    }

    private void llenarPaisCombo(Continente cont){
        lstPais= m1.listarPais(cont.getIdcontinente());
        view.llenarComboPais(lstPais);
    }   
    
    class cambiarLstPais implements ItemListener{
        @Override
        public void itemStateChanged(ItemEvent e) {
            int id = view.getContinente();            
            if (e.getStateChange()== ItemEvent.SELECTED){
                if (id>=0){ llenarPaisCombo(lstContinentes.get(id)); }
                else { view.llenarComboPais(null); }
            }                            
        }        
    }  
    
    class cambiarLstCiudad implements ItemListener{
        @Override
        public void itemStateChanged(ItemEvent e) {     
            int id = view.getPais();
            if (e.getStateChange()== ItemEvent.SELECTED){
                if (id>=0){ llenarCiudadCombo(lstPais.get(id)); }
                else { view.llenarComboCiudad(null); }
            }                            
        }        
    } 
    
    class LimpiarButtonListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            lstAeropuertos = m1.listarAeropuertos(null, null, false);
            view.llenaGrilla(lstAeropuertos);
        }
    }
    
    class ListarAeropuertos implements ActionListener
    {
        @Override
        public void actionPerformed(ActionEvent e) {      
            int continente = (view.getContinente()<0? -1: lstContinentes.get(view.getContinente()).getIdcontinente());
            int pais = (view.getPais()<0? -1: lstPais.get(view.getPais()).getIdpais());
            int ciudad = (view.getCiudad()<0? -1: lstCiudades.get(view.getCiudad()).getIdciudad());          
            lstAeropuertos = m.listarAeropuertos( continente, pais, ciudad); 
            view.llenaGrilla(lstAeropuertos);
        }
    }
    
    
    class Generar implements ActionListener
    {
        @Override
        public void actionPerformed(ActionEvent e) {
            
            if(lstAeropuertos.isEmpty()){
                ValHelper.mostrarError("No hay datos para generar el PDF");
            }
            else{           
            AlmacenesDatasource datasource = new AlmacenesDatasource();
            for (int i=0;i<lstAeropuertos.size();i++){                 
                    Almacenes p = new Almacenes(lstAeropuertos.get(i).getDescripcion(),lstAeropuertos.get(i).getTretencion(),lstAeropuertos.get(i).getNumpack(),lstAeropuertos.get(i).getCappack()); 
                    datasource.addAlmacenes(p);
                } 
            
            HashMap hs = new HashMap(); 
        
            hs.put("creador", usr.getNombre() + " "+usr.getAppaterno() + " "+usr.getApmaterno());
            
            JasperReport reporte = null;
            try {  
                
                String master = System.getProperty("user.dir");
                master += "/../SIGEPA_sist/src/main/resources/Recurso/jasper/Almacenes.jasper";
              
                reporte = (JasperReport)JRLoader.loadObjectFromFile(master);
//                        .loadObject("report1.jasper");
            } catch (JRException ex) {
                Logger.getLogger(ReporteAlmacenControlador.class.getName()).log(Level.SEVERE, null, ex);
            }
            JasperPrint jasperPrint = null;
            try {
                jasperPrint = JasperFillManager.fillReport(reporte, hs, datasource);

            } catch (JRException ex) {
                Logger.getLogger(ReporteAlmacenControlador.class.getName()).log(Level.SEVERE, null, ex);
            }
            
            JasperViewer.viewReport(jasperPrint,false);

            
           }   
        }
    }
  
}
